What is mjml?
MJML is a markup language designed to reduce the pain of coding responsive emails. It abstracts away the complexity of responsive design by providing a simple syntax that translates into responsive HTML.
What are mjml's main functionalities?
Responsive Email Design
MJML allows you to create responsive email designs easily. The above code creates a simple responsive email with a 'Hello World' text.
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-text>Hello World</mj-text>
</mj-column>
</mj-section>
</mj-body>
</mjml>
Custom Components
MJML provides a variety of built-in components like buttons, images, and text blocks. The above code demonstrates how to create a button that links to a URL.
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-button href="https://www.example.com">Click Me</mj-button>
</mj-column>
</mj-section>
</mj-body>
</mjml>
Conditional Rendering
MJML supports conditional rendering for different email clients. The above code shows how to include content specifically for Microsoft Outlook.
<mjml>
<mj-body>
<mj-raw>
<!--[if mso]>
<mj-section>
<mj-column>
<mj-text>Microsoft Outlook specific content</mj-text>
</mj-column>
</mj-section>
<![endif]-->
</mj-raw>
</mj-body>
</mjml>
Other packages similar to mjml
handlebars
Handlebars is a popular templating engine that can be used to create dynamic HTML content, including emails. Unlike MJML, Handlebars does not provide built-in responsive design features, so you would need to handle the CSS and media queries yourself.
pug
Pug (formerly Jade) is another templating engine that can be used to generate HTML. While it is powerful and flexible, it does not offer the same level of abstraction for responsive email design as MJML does.
nunjucks
Nunjucks is a templating engine inspired by Jinja2. It is highly extensible and can be used to generate HTML for emails. However, like Handlebars and Pug, it does not provide built-in support for responsive email design.
| Introduction
| Installation
| Usage
| Contribute |
Introduction
MJML is a markup language designed to reduce the pain of coding a responsive email. Its semantic syntax makes it easy and straightforward while its rich standard components library fastens your development time and lightens your email codebase. MJML’s open-source engine takes care of translating the MJML you wrote into responsive HTML.
Installation
Requirements
Via NPM:
We recommend installing and using MJML locally, in a project folder where you'll use MJML:
$> npm install mjml
In the folder where you installed MJML you can now run:
$> ./node_modules/.bin/mjml input.mjml
To avoid typing ./node_modules/.bin/
, add it to your PATH:
$> export PATH="$PATH:./node_modules/.bin"
You can now run MJML directly, in that folder:
$> mjml input.mjml
Via... click:
Show me the code!
Command line
Compiles the file and outputs the HTML generated in input.html
$> mjml -r input.mjml
Redirects the HTML generated to a file named output.html
$> mjml -r input.mjml -o output.html
Sets the validation rule to skip
so that the file is rendered without being validated
$> mjml -l skip -r input.mjml
Watches a file and compiles every time the file changes
$> mjml -w input.mjml -o output.html
Inside Node.js
import { mjml2html } from 'mjml'
const htmlOutput = mjml2html(`
<mjml>
<mj-body>
<mj-container>
<mj-section>
<mj-column>
<mj-text>
Hello World!
</mj-text>
</mj-column>
</mj-section>
</mj-container>
</mj-body>
</mjml>
`)
console.log(htmlOutput)
Create your component
One of the great advantages of MJML is that it's component based. Components abstract complex patterns and can easily be reused. Added to the standard library of components, it is also possible to create your own components!
To learn how to create your own component, follow this step-by-step guide which also includes a ready-to-use boilerplate.
Try it live
Get your hands dirty by trying the MJML online editor! Write awesome code on the left side and preview your email on the right. You can also get the rendered HTML directly from the online editor.
Contributors
Contribute